#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

//Substitui t1 por t2 na string t6
char *str_replace(char * t1, char * t2, char * t6){
   	char*t4, *t7, t3[1000];
   	char t5[1000] = "";
    t7 = strstr(t6,t1);
   	if (t7) {
   	   while(t7){
        t4=strstr(t6,t1);
        strncat(t5,t6,t4-t6);
        strncat(t5,t2,strlen(t2));
        t4+=strlen(t1);
        t6=t4;
        t7 = strstr(t6,t1);
       }
       return strcat(t5,t4);
    }
    else {
       return t6;
    }
}


//Copia Arquivo a partir de um ponto (c) ou at� um ponto (t)
void cpy_arq(char *origem, char *destino, char *palavra, char *opcao) {
	char texto[1000];
	FILE *arquivo = fopen(origem, "r");
	if (arquivo == NULL)
		exit(1);
	FILE *arquivo2 = fopen(destino,"w");
	if (arquivo2 == NULL) {
		exit(1);
	}
	fclose(arquivo2);
	if (opcao == "c") {
		do {
			fgets(texto, 1000, arquivo);
		}
		while (strstr(texto, palavra) == NULL);
		while (fgets(texto, 1000, arquivo)) {
		    arquivo2 = fopen(destino,"a");
			fputs (texto,arquivo2);
			fclose(arquivo2);
	    }
    }
	if (opcao == "t") {
		fgets(texto, 1000, arquivo);
		while (strstr(texto, palavra) == NULL){
			arquivo2 = fopen(destino,"a");
			fputs (texto,arquivo2);
			fclose(arquivo2);
			fgets(texto, 1000, arquivo);
		}
	}
	fclose(arquivo);
}



//Substitui ou Complementa Arquivo Completamente
void sub_arq(char *origem, char *destino, char *word1, char *word2, char *opcao) {
  char texto[1000];
  FILE *arquivo = fopen(origem, "r");
  if (arquivo == NULL)
     exit(1);
  FILE *arquivo2 = fopen("file2.txt","w");
  if (arquivo2 == NULL) {
     exit(1);
  }
  fclose(arquivo2);
  while(fgets (texto , 1000 , arquivo)){
        arquivo2 = fopen("file2.txt","a");
        fputs (str_replace(word1,word2,texto),arquivo2);
        fclose(arquivo2);
  }
  fclose (arquivo);
  arquivo2 = fopen("file2.txt", "r");
  if (arquivo2 == NULL) {
     exit(1);
  }
  if(opcao == "s") {
	arquivo = fopen(destino, "w");
	if (arquivo == NULL)
	    exit(1);
	fclose(arquivo);
	while(fgets (texto , 1000 , arquivo2)){
	    arquivo = fopen(destino,"a");
	    fputs (texto,arquivo);
	    fclose(arquivo);
	}
	fclose(arquivo2);
  }
  if (opcao == "a") {
	while(fgets (texto , 1000 , arquivo2)){
	    arquivo = fopen(destino,"a");
	    fputs (texto,arquivo);
	    fclose(arquivo);
	}
	fclose(arquivo2);
  }
  if (remove("file2.txt") != 0)
     exit(1);
}

//Fun��o
int func(int i, int j) {
    int y;
    if (i < 20 && j < 20) y = -3;
    else if (i < 30 && j < 30) y = -2;
    else if (i < 40 && j < 40) y = -1;
    else if (i > 80 && j > 80) y = 12;
    else if (i > 70 && j > 70) y = 8;
    else if (i > 60 && j > 60) y = 4;
    else y = 0;
    return y;
}

int main2() {
    char texto[10000] = "", cord[10000] = "";
    int x = 0, z = 0, cont1, cont2;
    char stringx[100], stringz[100];
    FILE *arquivo = fopen("Coord.txt","w");
    if (arquivo == NULL)
	exit(1);
	fclose(arquivo);
    FILE *arquivo2 = fopen("Funcao.wrl","w");
    if (arquivo2 == NULL)
	exit(1);
    fclose(arquivo2);
    cpy_arq("Elevation_Grid_Template.txt", "Funcao.wrl", "COORDS", "t");
    sub_arq("Funcao.wrl", "Funcao.wrl", "translation tra_x tra_y tra_z", "translation 0 0 0", "s");
    sub_arq("Funcao.wrl", "Funcao.wrl", "xDimension  DIM_X", "xDimension  100", "s");
    sub_arq("Funcao.wrl", "Funcao.wrl", "zDimension  DIM_Z", "zDimension  100", "s");
    sub_arq("Funcao.wrl", "Funcao.wrl", "xSpacing    ESP_X", "xSpacing    1", "s");
    sub_arq("Funcao.wrl", "Funcao.wrl", "zSpacing    ESP_Z", "zSpacing    1", "s");
    for (cont1 = 0; cont1 < 100; ++cont1) {
        for (cont2 = 0; cont2 < 100; ++cont2) {
            if ((cont1 == 100 - 1) && (cont2 == 100 - 1)) {
               sprintf(cord, " %d", func(cont1,cont2));
               arquivo = fopen("Coord.txt","a");
			   fputs (cord, arquivo);
			   fclose(arquivo);
            }
            else {
               sprintf(cord, " %d,", func(cont1,cont2));
               arquivo = fopen("Coord.txt","a");
			   fputs (cord, arquivo);
			   fclose(arquivo);
            }
        }
        arquivo = fopen("Coord.txt","a");
		fputs ("\n", arquivo);
		fclose(arquivo);
    }
	arquivo = fopen("Coord.txt","r");
    while(fgets (texto , 1000 , arquivo)){
		arquivo2 = fopen("Funcao.wrl","a");
	    fputs (texto,arquivo2);
	    fclose(arquivo2);
	}
	fclose(arquivo);
    if (remove("Coord.txt") != 0)
       exit(1);
	cpy_arq("Elevation_Grid_Template.txt", "Final.txt", "COORDS", "c");
	arquivo = fopen("Final.txt","r");
    while(fgets (texto , 1000 , arquivo)){
		arquivo2 = fopen("Funcao.wrl","a");
	    fputs (texto,arquivo2);
	    fclose(arquivo2);
	}
	fclose(arquivo);
    if (remove("Final.txt") != 0)
       exit(1);
}
